package com.mf.controller;

import java.util.Date;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.mf.model.Kullanici;
import com.mf.service.KullaniciService;

@Controller
public class UserController {

	@Autowired
	KullaniciService kullaniciService;

	private static final Logger logger = LoggerFactory.getLogger(UserController.class);

	@RequestMapping(value = UserRestURIConstants.GET_USER, method = RequestMethod.GET)
	public @ResponseBody
	Kullanici getUser(@PathVariable("id") int kullaniciId) {
		logger.info("Start getEmployee. ID=" + kullaniciId);
		Kullanici kullanici = (Kullanici) kullaniciService.findById(Kullanici.class, kullaniciId);
		return kullanici;
	}

	@RequestMapping(value = UserRestURIConstants.GET_ALL_USER, method = RequestMethod.GET)
	public @ResponseBody
	List<Kullanici> getAllUsers() {
		logger.info("Start getAllEmployees.");
		List<Kullanici> kullanicis = kullaniciService.findAll(Kullanici.class);
		return kullanicis;
	}

	@RequestMapping(value = UserRestURIConstants.CREATE_USER, method = RequestMethod.POST)
	public @ResponseBody
	Kullanici createUser(@RequestBody Kullanici kullanici) {
		logger.info("Start createEmployee.");
		kullanici.setTarih(new Date());
		kullaniciService.saveOrUpdate(kullanici);
		return kullanici;
	}

	@RequestMapping(value = UserRestURIConstants.DELETE_USER, method = RequestMethod.PUT)
	public @ResponseBody
	Kullanici deleteUser(@PathVariable("id") int kullaniciId) {
		logger.info("Start deleteEmployee.");
		Kullanici kullanici = (Kullanici) kullaniciService.findById(Kullanici.class, kullaniciId);
		kullaniciService.delete(kullanici);
		return kullanici;
	}

	@RequestMapping(value = UserRestURIConstants.FACE_USER_EXIST, method = RequestMethod.GET)
	public @ResponseBody
	Kullanici getFaceUser(@PathVariable("faceId") String faceId) {
		logger.info("Start getEmployee. ID=" + faceId);
		List<Kullanici> kullanicis = (List<Kullanici>) kullaniciService.findByProperty(Kullanici.class, "faceId",
				faceId);
		if (kullanicis != null && kullanicis.size() > 0)
			return kullanicis.get(0);
		return null;
	}

	@RequestMapping(value = UserRestURIConstants.USER_EXIST, method = RequestMethod.GET)
	public @ResponseBody
	Kullanici getUser(@PathVariable("mail") String mail) {
		Kullanici kullanici = kullaniciService.getKullanici(mail);
		return kullanici;
	}

	@RequestMapping(value = UserRestURIConstants.SET_PUBLIC_USER, method = RequestMethod.GET)
	public @ResponseBody
	Kullanici setPublicUser(@PathVariable("id") String id) {
		Kullanici kullanici = (Kullanici) kullaniciService.findById(Kullanici.class, id);
		kullanici.setStatu(true);
		kullaniciService.saveOrUpdate(kullanici);
		return kullanici;
	}

	@RequestMapping(value = UserRestURIConstants.SET_PRIVATE_USER, method = RequestMethod.GET)
	public @ResponseBody
	Kullanici setPrivateUser(@PathVariable("id") String id) {
		Kullanici kullanici = (Kullanici) kullaniciService.findById(Kullanici.class, id);
		kullanici.setStatu(false);
		kullaniciService.saveOrUpdate(kullanici);
		return kullanici;
	}

}